package com.itany.corejava.code17_设计模式.动态代理;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

/**
 * @author MissChen
 * @date 2024年03月28日 13:42
 */
public class Test {
    public static void main(String[] args) {
        // Proxy.newProxyInstance(参数1,参数2,参数3)方法创建代理对象，并通过代理对象调用了方法，在方法调用前后，会执行处理器中的操作
        // 参数1：定义代理类的类加载器，即：目标类的类加载器
        // 参数2：定义代理类实现的接口列表，即：目标类实现的接口列表
        // 参数3：指派方法调用的处理程序，即：代理类的方法的具体实现（ InvocationHandler h）
        UserService userService= (UserService) Proxy.newProxyInstance(
                UserServiceImpl.class.getClassLoader(),
                UserServiceImpl.class.getInterfaces(),
                new LogInvocationHandler(new UserServiceImpl())
            );
        String msg=userService.login("admin","1234");
        System.out.println(msg);
        String msg2=userService.register("aa","12","12","aaa");
        System.out.println(msg2);

        SomeService someService= (SomeService) Proxy.newProxyInstance(
                SomeServiceImpl.class.getClassLoader(),
                SomeServiceImpl.class.getInterfaces(),
                new LogInvocationHandler(new SomeServiceImpl())
        );
        someService.doSome();

    }
}
